
/**
 * 移除数组中的空值
 * @param  {} array 必填：要移除的数组
 */
const arrTrim = (array) => {
  if (!Array.isArray(array)) {
    return console.log(`您输入的数据类型不正确`)
  }
  for (let i = 0; i < array.length; i++) {
    if (array[i] == "" || typeof array[i] == "undefined") {
      array.splice(i, 1);
      i = i - 1;
    }
  }
  return array;
}

/**
 * 数组根据下面对象的某一个字段进行排序 this.tableData.sort(arrSort(sort.prop,bol))
 * @param  {} field 必填：对象的字段
 * @param  {} bol 可选：true是降序，false为升序 默认为降序
 */
const arrSort = (field, bol = true) => {
  return function (a, b) {
    let i = a[field];
    let j = b[field];
    if (bol) return i - j;
    if (!bol) return j - i;
  };
}

  /**
   * @description: 深拷贝
   * @@param {type}: target 要进行深拷贝的对象
   * @@return: 拷贝后的数据
   */
const clone = function(target, map = new WeakMap()) {
    if (typeof target === 'object') {
      let cloneTarget = Array.isArray(target) ? [] : {}
      if (map.get(target)) {
        return map(target)
      }
      map.set(target, cloneTarget)
      for (const key in target) {
        cloneTarget[key] = clone(target[key], map)
      }
      return cloneTarget;
    } else {
      return target;
    }
  }

  /**
   * 数组 或者 字符串去重
   * @param  {} data 必填, 数组的字段
   * @param  {} sym  可选，如果是字符串的话，字符串用什么符号来分割,默认是逗号
   */
  const removeRepeat = (data, sym = ',') => {
    if (typeof data == 'string') {
      let arr = data.split(sym)
      return [...new Set(arr)].join(sym);
    }
    if (Array.isArray(data)) {
      return [...new Set(data)];
    }
    return console.log(`您输入的数据类型不正确`)
  }
  export {
    arrTrim, //移除数组中的空值
    arrSort, //数组根据某一个字段进行排序
    removeRepeat, //数组 或者 字符串去重
    clone, // 深拷贝
  }